﻿Pour la conception de ce jeu nous avons utilisé plusieurs patrons de conception répondant aux problèmes posés par les spécifications du projet. Ce chapitre a pour but d’expliquer le choix de ces patrons de conception ainsi que leur rôle dans notre implémentation.\\


Tout d’abord le patron \textbf{Modèle-Vue-Contrôleur} (MVC) qui englobe et organise le projet, toutes les classes font partie de cette représentation. Le Modèle correspond aux données et à leur manipulation, la vue concerne l’interface utilisateur et le contrôleur la gestion des événements. Ces trois ensembles de classes communiquent entre eux selon le schéma \ref{MVC}.
Dans ce schéma, les lignes pleines indiquent une association directe tandis que les pointillés sont une association indirecte.

\begin{figure}[H]
\begin{center}
\includegraphics [width=15cm]{img/ModeleMVC.png}
\end{center}
\caption{Schéma d'un modèle MVC}
\label{MVC}
\end{figure}

L’\textbf{Observateur} permet de synchroniser le modèle et la vue, que nous venons d'évoquer. Le principe est que chaque classe observable contient une liste d'observateurs, ainsi à l'aide d'une méthode de notification l'ensemble des observateurs est prévenu. La classe observée hérite de "Observable" qui gère la liste des observateurs. La classe Observateur est quant à elle purement abstraite, la fonction de mise à jour (update()) ne pouvant être définie que par une classe spécialisée.

\begin{figure}[H]
\begin{center}
\includegraphics [width=10cm]{img/Observateur.png}
\end{center}
\caption{Utilisation du patron de conception : Observateur}
\label{OBS}
\end{figure}

Ici \ref{OBS}, les vaisseaux ainsi que les cases sont des objets Observables et les objets visuels attribués sont des Observateurs. Ainsi lorsqu’un évènement sur un Vaisseau nécessite un rafraichissement de l’affichage de celui-ci, l’objet VueVaisseau attribué est notifié et se réactualise.\\



Le \textbf{Poids-mouche} est utilisé pour réduire le nombre d'objets à instancier lorsque ceux-ci présentent plusieurs similitudes. 

\begin{figure}[H]
\begin{center}
\includegraphics [width=10cm]{img/Poids-Mouche.png}
\end{center}
\caption{Utilisation du patron de conception : Poids-Mouche}
\label{PM}
\end{figure}


Dans ce projet \ref{PM}, c’est le cas pour un bon nombre d’objets comme certaines cases du plateau de jeu, les Astéroïdes et les Artefacts.
La case vide ainsi que la case Energie ne seront instanciées qu’une seule fois. Sur le plateau chaque case de l’un de ces types ne sera qu’une référence sur la case créée.
Il en est de même pour les objets Astéroïdes et Artefacts, il n’existe dans une partie qu’une instance de ces objets.\\



Le \textbf{Monteur} permet de créer des objets complexes à partir d’autres objets.

\begin{figure}[H]
\begin{center}
\includegraphics [width=10cm]{img/Monteur.png}
\end{center}
\caption{Utilisation du patron de conception : Monteur}
\label{MT}
\end{figure}


Ici \ref{MT}, il sert à créer le plateau de jeu, ses cases et autres caractéristiques du plateau. Ainsi, il sera possible d’implémenter plusieurs plateaux différents, en changeant la disposition des cases par exemple.\\



Une \textbf{Fabrique Abstraite} encapsule un groupe de fabriques ayant une thématique commune, pour un usage générique.
Les \textbf{Fabriques} créées ont pour but d'isoler la création des objets de leur utilisation. Voici son application dans le cadre de notre projet \ref{Fab_Abs}.

\begin{figure}[H]
\begin{center}
\includegraphics [width=15cm]{img/FabAbs.png}
\end{center}
\caption{Utilisation du patron de conception : Fabrique Abstraite}
\label{Fab_Abs}
\end{figure}

Ici ce patron de conception est un peu superflu car il n'est pas indispensable en vue de l'application à réaliser. La Fabrique Abstraite n'a réellement un rôle que lorsque l'on veut créer plusieurs Fabriques, ce qui n'est pas le cas ici.\\



La \textbf{Commande} est souvent utilisé dans les interfaces graphiques. Ce patron de conception permet d'encapsuler les actions des objets héritant de Commande.
Voici son application dans le cadre de notre projet \ref{Cmd2}.

\begin{figure}[H]
\begin{center}
\includegraphics [width=15cm]{img/Commande.png}
\end{center}
\caption{Utilisation du patron de conception : Commande}
\label{Cmd2}
\end{figure}

Ainsi dans notre projet pour les objets héritant de Commande, on utilise la fonction doIt() pour lorsque l'on veut réaliser l'action associée si la fonction booléenne canDo() rend vrai.\\



